package org.coopac.controller;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;

import org.coopac.model.CoopacAreaTrabajador;
import org.coopac.model.CoopacCargoPersona;
import org.coopac.model.CoopacDireccionPersona;
import org.coopac.model.CoopacDocumentoPersona;
import org.coopac.model.CoopacPersona;
import org.coopac.model.CoopacTelefonoPersona;
import org.coopac.model.CoopacTipoMaestro;
import org.coopac.model.CoopacTrabajador;
import org.coopac.model.CoopacUbigeo;
import org.coopac.service.IAreaTrabajadorService;
import org.coopac.service.ICargoPersonaService;
import org.coopac.service.IDireccionPersonaService;
import org.coopac.service.IDocumentoPersonaService;
import org.coopac.service.IPersonaService;
import org.coopac.service.ITelefonoPersonaService;
import org.coopac.service.ITipoMaestroService;
import org.coopac.service.ITrabajadorService;
import org.coopac.service.IUbigeoService;

@ManagedBean(name="recepcionPersona")
@SessionScoped
public class RecepcionDocumentoPController implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	@ManagedProperty(value="#{personaService}")
	IPersonaService personaServicio;
	CoopacPersona personaN;
	
	@ManagedProperty(value="#{documentoPersonaService}")
	IDocumentoPersonaService documentoService;
	CoopacDocumentoPersona documentoPersonaN;
	
	@ManagedProperty(value="#{telefonoPersonaService}")
	ITelefonoPersonaService telefonoService;
	CoopacTelefonoPersona telefonoPersonaN;
	
	@ManagedProperty(value="#{direccionPersonaService}")
	IDireccionPersonaService direccionService;
	CoopacDireccionPersona direccionPersonaN;
	
	@ManagedProperty(value="#{tipoMaestroService}")
	ITipoMaestroService tipoMaestroService;	
	
	@ManagedProperty(value="#{cargoPersonaService}")
	ICargoPersonaService cargoPersonaService; 
	CoopacCargoPersona cargoPersona;
	
	@ManagedProperty(value="#{areaTrabajadorService}")
	IAreaTrabajadorService areaTrabajadorService;
	CoopacAreaTrabajador areaTrabajador;
	
	@ManagedProperty(value="#{trabajadorService}")
	ITrabajadorService trabajadorService;
	CoopacTrabajador trabajador;
	
	@ManagedProperty(value="#{ubigeoService}")
	IUbigeoService ubigeoService;
	CoopacUbigeo ubigego;
	
	
	CoopacTipoMaestro tipoMaestro;
	
	

	CoopacTipoMaestro tipoMaestroPersona;
	CoopacTipoMaestro tipoMaestroZona;
	CoopacTipoMaestro tipoMaestroVia;
	CoopacTipoMaestro tipoMaestroTipoVivienda;
	CoopacTipoMaestro tipoMaestroDni;
	CoopacTipoMaestro tipoMaestroTipoTelefono;
	
	
	
	private Integer idDistrito;
	
	private Integer idCTMNatural;
	private Integer idCTMZona;
	private Integer idCTMVia;
	private Integer idCTMVivienda;
	private Integer idCTMTelf;
	private Integer idCTMCargo;
	private Integer idPersonaCooperativa;
	private Integer idCTMAreaDestino;
	@SuppressWarnings("unused")
	private List<SelectItem> listaTrabajadorxArea = new ArrayList<SelectItem>();
	private Integer idTrabajadorxarea;
    private String numero;



	public RecepcionDocumentoPController(){
		ubigego = new CoopacUbigeo();
		personaN = new CoopacPersona();
		documentoPersonaN = new CoopacDocumentoPersona();
		direccionPersonaN = new CoopacDireccionPersona();
		telefonoPersonaN = new CoopacTelefonoPersona();
		cargoPersona = new CoopacCargoPersona();
		areaTrabajador = new CoopacAreaTrabajador();
		trabajador = new CoopacTrabajador();
		tipoMaestroPersona = new CoopacTipoMaestro();
		tipoMaestroZona= new CoopacTipoMaestro();
		tipoMaestroVia = new CoopacTipoMaestro();
		tipoMaestroTipoVivienda = new CoopacTipoMaestro();
		tipoMaestroDni = new CoopacTipoMaestro();
		tipoMaestroTipoTelefono = new CoopacTipoMaestro(); 
		idDistrito=120801;
		idCTMAreaDestino=60;
	}
	public String getNumero() {
		return numero;
	}

	public void setNumero(String numero) {
		this.numero = numero;
	}
	public IUbigeoService getUbigeoService() {
		return ubigeoService;
	}

	public void setUbigeoService(IUbigeoService ubigeoService) {
		this.ubigeoService = ubigeoService;
	}
	
	public CoopacUbigeo getUbigego() {
		return ubigego;
	}
	public void setUbigego(CoopacUbigeo ubigego) {
		this.ubigego = ubigego;
	}
	public IPersonaService getPersonaServicio() {
		return personaServicio;
	}
	public void setPersonaServicio(IPersonaService personaServicio) {
		this.personaServicio = personaServicio;
	}
	public CoopacPersona getPersonaN() {
		return personaN;
	}
	public void setPersonaN(CoopacPersona personaN) {
		this.personaN = personaN;
	}
	public IDocumentoPersonaService getDocumentoService() {
		return documentoService;
	}
	public void setDocumentoService(IDocumentoPersonaService documentoService) {
		this.documentoService = documentoService;
	}
	public CoopacDocumentoPersona getDocumentoPersonaN() {
		return documentoPersonaN;
	}
	public void setDocumentoPersonaN(CoopacDocumentoPersona documentoPersonaN) {
		this.documentoPersonaN = documentoPersonaN;
	}
	public ITelefonoPersonaService getTelefonoService() {
		return telefonoService;
	}
	public void setTelefonoService(ITelefonoPersonaService telefonoService) {
		this.telefonoService = telefonoService;
	}
	public IDireccionPersonaService getDireccionService() {
		return direccionService;
	}
	public void setDireccionService(IDireccionPersonaService direccionService) {
		this.direccionService = direccionService;
	}
	public CoopacTipoMaestro getTipoMaestroZona() {
		return tipoMaestroZona;
	}
	public void setTipoMaestroZona(CoopacTipoMaestro tipoMaestroZona) {
		this.tipoMaestroZona = tipoMaestroZona;
	}
	public CoopacTipoMaestro getTipoMaestroVia() {
		return tipoMaestroVia;
	}
	public void setTipoMaestroVia(CoopacTipoMaestro tipoMaestroVia) {
		this.tipoMaestroVia = tipoMaestroVia;
	}
	public CoopacTipoMaestro getTipoMaestroTipoVivienda() {
		return tipoMaestroTipoVivienda;
	}
	public void setTipoMaestroTipoVivienda(CoopacTipoMaestro tipoMaestroTipoVivienda) {
		this.tipoMaestroTipoVivienda = tipoMaestroTipoVivienda;
	}
	public CoopacTipoMaestro getTipoMaestroDni() {
		return tipoMaestroDni;
	}
	public void setTipoMaestroDni(CoopacTipoMaestro tipoMaestroDni) {
		this.tipoMaestroDni = tipoMaestroDni;
	}

	public CoopacTipoMaestro getTipoMaestroPersona() {
		return tipoMaestroPersona;
	}


	public void setTipoMaestroPersona(CoopacTipoMaestro tipoMaestroPersona) {
		this.tipoMaestroPersona = tipoMaestroPersona;
	}
	
	public CoopacTipoMaestro getTipoMaestroTipoTelefono() {
		return tipoMaestroTipoTelefono;
	}

	public void setTipoMaestroTipoTelefono(CoopacTipoMaestro tipoMaestroTipoTelefono) {
		this.tipoMaestroTipoTelefono = tipoMaestroTipoTelefono;
	}

	
	public Integer getIdDistrito() {
		return idDistrito;
	}

	public void setIdDistrito(Integer idDistrito) {
		this.idDistrito = idDistrito;
	}

	public ITipoMaestroService getTipoMaestroService() {
		return tipoMaestroService;
	}
	public void setTipoMaestroService(ITipoMaestroService tipoMaestroService) {
		this.tipoMaestroService = tipoMaestroService;
	}

	public Integer getIdCTMZona() {
		return idCTMZona;
	}
	public void setIdCTMZona(Integer idCTMZona) {
		this.idCTMZona = idCTMZona;
	}
	public Integer getIdCTMVia() {
		return idCTMVia;
	}

	public void setIdCTMVia(Integer idCTMVia) {
		this.idCTMVia = idCTMVia;
	}
	
	public Integer getIdCTMVivienda() {
		return idCTMVivienda;
	}
	
	public void setIdCTMVivienda(Integer idCTMVivienda) {
		this.idCTMVivienda = idCTMVivienda;
	}
	
	public Integer getIdCTMNatural() {
		return idCTMNatural;
	}
	
	public void setIdCTMNatural(Integer idCTMNatural) {
		this.idCTMNatural = idCTMNatural;
	}
	

	public Integer getIdCTMTelf() {
		return idCTMTelf;
	}

	public void setIdCTMTelf(Integer idCTMTelf) {
		this.idCTMTelf = idCTMTelf;
	}
	
	public CoopacTelefonoPersona getTelefonoPersonaN() {
		return telefonoPersonaN;
	}
	public void setTelefonoPersonaN(CoopacTelefonoPersona telefonoPersonaN) {
		this.telefonoPersonaN = telefonoPersonaN;
	}
	public CoopacDireccionPersona getDireccionPersonaN() {
		return direccionPersonaN;
	}

	public void setDireccionPersonaN(CoopacDireccionPersona direccionPersonaN) {
		this.direccionPersonaN = direccionPersonaN;
	}
	public Integer getIdCTMCargo() {
		return idCTMCargo;
	}
	public void setIdCTMCargo(Integer idCTMCargo) {
		this.idCTMCargo = idCTMCargo;
	}
	public Integer getIdPersonaCooperativa() {
		return idPersonaCooperativa;
	}
	public void setIdPersonaCooperativa(Integer idPersonaCooperativa) {
		this.idPersonaCooperativa = idPersonaCooperativa;
	}
	public ICargoPersonaService getCargoPersonaService() {
		return cargoPersonaService;
	}
	public void setCargoPersonaService(ICargoPersonaService cargoPersonaService) {
		this.cargoPersonaService = cargoPersonaService;
	}
	public CoopacCargoPersona getCargoPersona() {
		return cargoPersona;
	}
	public void setCargoPersona(CoopacCargoPersona cargoPersona) {
		this.cargoPersona = cargoPersona;
	}
	
	public IAreaTrabajadorService getAreaTrabajadorService() {
		return areaTrabajadorService;
	}
	public void setAreaTrabajadorService(
			IAreaTrabajadorService areaTrabajadorService) {
		this.areaTrabajadorService = areaTrabajadorService;
	}
	public CoopacAreaTrabajador getAreaTrabajador() {
		return areaTrabajador;
	}
	public void setAreaTrabajador(CoopacAreaTrabajador areaTrabajador) {
		this.areaTrabajador = areaTrabajador;
	}
	public ITrabajadorService getTrabajadorService() {
		return trabajadorService;
	}
	public void setTrabajadorService(ITrabajadorService trabajadorService) {
		this.trabajadorService = trabajadorService;
	}
	public CoopacTrabajador getTrabajador() {
		return trabajador;
	}
	public void setTrabajador(CoopacTrabajador trabajador) {
		this.trabajador = trabajador;
	}
	public List<SelectItem> getListaTrabajadorxArea() {
		return areaTrabajadorService.listaByIdArea(idCTMAreaDestino);
	}
	public void setListaTrabajadorxArea(List<SelectItem> listaTrabajadorxArea) {
		this.listaTrabajadorxArea = listaTrabajadorxArea;
	}
	public Integer getIdTrabajadorxarea() {
		return idTrabajadorxarea;
	}
	public void setIdTrabajadorxarea(Integer idTrabajadorxarea) {
		this.idTrabajadorxarea = idTrabajadorxarea;
	}
	
	public Integer getIdCTMAreaDestino() {
		return idCTMAreaDestino;
	}
	public void setIdCTMAreaDestino(Integer idCTMAreaDestino) {
		this.idCTMAreaDestino = idCTMAreaDestino;
	}

	public void addRecepcionper(ActionEvent event){
		
		cargoPersona.setFlag(true);
		CoopacTipoMaestro mt = new CoopacTipoMaestro();
		mt.setIdTipoMaestro(idCTMCargo);
		cargoPersona.setCoopacTipoMaestroByIdTipoMaestroCargo(mt);
		CoopacPersona o = new CoopacPersona();
		o.setIdPersona(idPersonaCooperativa);
		cargoPersona.setCoopacPersonaByIdPersonaTipoCoopac(o);
		CoopacAreaTrabajador ob = areaTrabajadorService.getAreaTrabaxidPersona(idTrabajadorxarea);
		cargoPersona.setCoopacAreaTrabajador(ob);		
		cargoPersonaService.save(cargoPersona);
		
		
		tipoMaestroPersona.setIdTipoMaestro(51);
		personaN.setCoopacTipoMaestroByIdTipoMaestroPersona(tipoMaestroPersona);
		personaN.setFlag(true);
		personaServicio.save(personaN);
		
		documentoPersonaN.setCoopacPersona(personaN);
		tipoMaestroDni.setIdTipoMaestro(idCTMNatural);
		documentoPersonaN.setCoopacTipoMaestro(tipoMaestroDni);
		documentoPersonaN.setFlag(true);
		documentoService.save(documentoPersonaN);
		
		telefonoPersonaN.setCoopacPersona(personaN);
		tipoMaestroTipoTelefono.setIdTipoMaestro(idCTMTelf);
		telefonoPersonaN.setCoopacTipoMaestro(tipoMaestroTipoTelefono);
		telefonoPersonaN.setFlag(true);
		telefonoService.save(telefonoPersonaN);
		
		direccionPersonaN.setCoopacPersona(personaN);
		tipoMaestroZona.setIdTipoMaestro(idCTMZona);
		direccionPersonaN.setCoopacTipoMaestroByIdTipoMaestroZona(tipoMaestroZona);
		tipoMaestroVia.setIdTipoMaestro(idCTMVia);
		direccionPersonaN.setCoopacTipoMaestroByIdTipoMaestroVia(tipoMaestroVia);
		tipoMaestroTipoVivienda.setIdTipoMaestro(idCTMVivienda);
		direccionPersonaN.setCoopacTipoMaestroByIdTipoMaestroVivienda(tipoMaestroTipoVivienda);
		ubigego.setIdUbigeo(idDistrito);
		direccionPersonaN.setCoopacUbigeo(ubigego);
		direccionPersonaN.setFlag(true);
		direccionService.save(direccionPersonaN);
		
		limpiarCampos(event);
		
	}

	public void buscarByNumDocumento(ActionEvent event){
		CoopacDocumentoPersona documento = documentoService.getPersonaByDocumento(numero);
		Integer id = documento.getIdDocumentoPersona();
		documentoPersonaN =  documentoService.getById(id);
		Integer id3 = documentoPersonaN.getCoopacPersona().getIdPersona();
		personaN = personaServicio.getById(id3);
		direccionPersonaN = direccionService.getDireccionByPersona(id3);
		telefonoPersonaN = telefonoService.getTelefonoByPersona(id3);
		Integer id4 = direccionPersonaN.getCoopacUbigeo().getIdUbigeo();
		ubigego = ubigeoService.getById(id4);
		Integer id5 = direccionPersonaN.getCoopacTipoMaestroByIdTipoMaestroVia().getIdTipoMaestro();
		tipoMaestro = tipoMaestroService.getById(id5);
	}
	
	public void limpiarCampos(ActionEvent event) {
		
		personaN.setApellidoPaternoRazonSocial("");
		personaN.setApellidoMaterno("");
		personaN.setNombrePersonaNombreComercial("");
		personaN.setEmail("");
		personaN.setPaginaWeb("");
		cargoPersona.setAsunto("");
		cargoPersona.setObservacion("");
		documentoPersonaN.setNumero("");
		telefonoPersonaN.setNumero("");
		telefonoPersonaN.setAnexo("");
		direccionPersonaN.setNombreZona("");
		direccionPersonaN.setNombreVia("");
		direccionPersonaN.setNumero("");
		direccionPersonaN.setDepartamento("");
		direccionPersonaN.setInterior("");
		direccionPersonaN.setManzana("");
		direccionPersonaN.setLote("");
		direccionPersonaN.setKilometro("");
		direccionPersonaN.setReferencia("");
		idDistrito = 120804;
		idCTMNatural = 32;
		idCTMTelf = 38;
		idCTMZona = 2;
		idCTMVia = 15;
		idCTMVivienda = 27;
		documentoPersonaN.setNumero("");
		setNumero("");
	}

	
	
	
	
	
	
}
